#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
#include "LRU.h"
#define OK 1
#define TRUE 1
#define FALSE 0
// typedef int ElemeType;
// typedef int Status;
//定义读写比例值的
extern int Cw_temp;
extern int Cr_temp;

//typedef struct BufNode
//{
//    ElemeType LPN;//输入的LPN号
//    int isD;//脏页标识符
//    struct BufNode *pre,*next;
//}BufNode,*BufList;


//函数定义声明
//首先创建两个队列一个DLRU，一个CLRU
void InitCLRUList(BufList *CHead);
void InitDLRUList(BufList *DHead);
//释放和销毁两个链表队列
Status DestroyCLRUList(BufList *CHead);
Status DestroyDLRUList(BufList *Dhead);
//遍历两链表查看是否存在LPN,存在返回指向该节点的值BufNode类型的指针
BufList FindLPNinCLRU(BufList CHead,ElemeType LPN);
BufList FindLPNinDLRU(BufList Dhead,ElemeType LPN);
//计算两个链表的长度
Status CLRULength(BufList CHead);
Status DLRULength(BufList DHead);
//将新的请求加入到各自的链表中去
Status AddNewToCLRU(BufList CHead,ElemeType LPN,int flag);
Status AddNewToDLRU(BufList DHead,ElemeType LPN,int flag);
//删除各自的LRU位置的项
Status DeleteCLRUend(BufList CHead);
Status DeleteDLRUend(BufList DHead);
//将命中的LPN移动到MRU位置
Status MoveCLRUtoDLRU(BufList DHead,BufList HitLPN);
//更新目标队列tau的值
int ComputeTau(BufList DHead,BufList CHead,int *tau,int flag);


